package com.gitee.techstack.redisson.annotation;

import com.gitee.techstack.redisson.enums.LockType;
import org.springframework.core.annotation.AliasFor;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * ┏┓　　　┏┓
 * ┏┛┻━━━┛┻┓
 * ┃　　　　　　　┃
 * ┃　　　━　　　┃
 * ┃　┳┛　┗┳　┃
 * ┃　　　　　　　┃
 * ┃　　　┻　　　┃
 * ┃　　　　　　　┃
 * ┗━┓　　　┏━┛
 * 　　┃　　　┃神兽保佑
 * 　　┃　　　┃代码无BUG！
 * 　　┃　　　┗━━━┓
 * 　　┃　　　　　　　┣┓
 * 　　┃　　　　　　　┏┛
 * 　　┗┓┓┏━┳┓┏┛
 * 　　　┃┫┫　┃┫┫
 * 　　　┗┻┛　┗┻┛
 *
 * @author Yeoman
 * @description
 * @create 2019/9/19 上午11:20
 **/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface LockAction {
    /** 锁的资源，key。支持spring El表达式*/
    @AliasFor("key")
    String value() default "'default'";

    @AliasFor("value")
    String key() default "'default'";

    /** 锁类型*/
    LockType lockType() default LockType.REENTRANT_LOCK;

    /** 获取锁等待时间，默认10秒*/
    long waitTime() default 10L;

    /** 锁自动释放时间，默认30秒*/
    long leaseTime() default 30L;

    /** 时间单位（获取锁等待时间和持锁时间都用此单位）*/
    TimeUnit unit() default TimeUnit.SECONDS;
}
